<?php

require_once 'conexion.php';
require_once 'orden.php';
require_once 'persistenciaEstado.php';
require_once 'persistenciaReclamo.php';
require_once 'persistenciaCliente.php';
require_once 'persistenciaLugar.php';
require_once 'persistenciaFuncionario.php';

class PersistenciaOrden {

    private static $instance = false;

    public static function getInstance() {
        if (!self::$instance instanceof self) {
            self::$instance = new self;
        }
        return self::$instance;
    }

    public function crearOrden($datos, $fidelizar) {
        try {
            $db = Conexion::getInstance();

            if ($fidelizar) {
                $sentencia = "INSERT INTO ordenesfidelizar (fecha,manoObra,fechaCarta,fechaPago,observaciones,precio,numeroCarta,otros,materiales,descripcion,
                    idEstado,idReclamo,idCliente,idLugar,pareja,nombreCarta,pagada,moneda,controlada,contacto,calendario) VALUES('" . $datos[0] . "','" . $datos[1] . "','" . $datos[2] . "','" . $datos[3] . "',
                    '" . $datos[4] . "','" . $datos[5] . "','" . $datos[6] . "','" . $datos[7] . "','" . $datos[8] . "','" . $datos[9] . "','" . $datos[10] . "','" . $datos[11] . "',
                    '" . $datos[12] . "','" . $datos[13] . "'," . $datos[15] . ",'" . $datos[16] . "'," . $datos[17] . "," . $datos[18] . "',0,'" . $datos[19] . "'," . $datos[20] . ",'" . $datos[21] . "')";
            } else {
                $sentencia = "INSERT INTO ordenes (fecha,manoObra,fechaCarta,fechaPago,observaciones,precio,numeroCarta,otros,materiales,descripcion,
                    idEstado,idReclamo,idCliente,idLugar,pareja,nombreCarta,pagada,moneda,controlada,contacto,calendario,usuario) VALUES('" . $datos[0] . "','" . $datos[1] . "','" . $datos[2] . "','" . $datos[3] . "',
                    '" . $datos[4] . "','" . $datos[5] . "','" . $datos[6] . "','" . $datos[7] . "','" . $datos[8] . "','" . $datos[9] . "','" . $datos[10] . "','" . $datos[11] . "',
                    '" . $datos[12] . "','" . $datos[13] . "'," . $datos[15] . ",'" . $datos[16] . "'," . $datos[17] . ",'" . $datos[18] . "',0,'" . $datos[19] . "'," . $datos[20] . ",'" . $datos[21] . "')";

//               
                $consulta = $db->consulta($sentencia);
                $id = $db->obtenerUltimoID();
                var_dump($sentencia);
                $this->agregarTrabajos($datos[0], $datos[11], $id);
            }

            $pF = PersistenciaFuncionario::getInstance();
            foreach ($datos[14] as $fun) {
                $dato = array($id, $fun);
                $pF->agregarOrdenFuncionario($dato, $fidelizar);
            }
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
    }

    public function agregarTrabajos($fecha, $idReclamo, $id) {
        try {
//            var_dump($fecha);
            $db = Conexion::getInstance();
            if (preg_match("/[0-9]{1,2}\/[0-9]{1,2}\/([0-9][0-9]){1,2}/", $fecha)) {
                list( $year, $mon, $day) = explode('/', $fecha);
                $fecha = date('Y/m/d', mktime(0, 0, 0, $mon, $day, $year));
            }
            if (preg_match("/[0-9]{1,2}-[0-9]{1,2}-([0-9][0-9]){1,2}/", $fecha)) {
                list( $year, $mon, $day) = explode('-', $fecha);
                $fecha = date('Y/m/d', mktime(0, 0, 0, $mon, $day, $year));
            }

            $sentencia8 = 'select idEspecialidad from reclamos where idreclamo=' . $idReclamo;
            $idEspecialidad = $db->consulta($sentencia8);
            $sentencia2 = 'select if((select (select(select count(ci) from funcionarios where idEspecialidad= ' . $idEspecialidad[0][0] . ')*4)- (select ifnull((select sum(tiempoParcial) from trabajos where fechaInicio=\'' . $fecha . '\' and porcentaje < 100 and idOrden in (select numero from ordenes where idReclamo in(select idReclamo from reclamos where idEspecialidad=' . $idEspecialidad[0][0] . ')) ) ,0) ))>=(select tiempoEstimado from reclamos where idreclamo=' . $idReclamo . '),true,false)';
//            $sentencia3 = 'select if((select calendarizable from reclamos where idreclamo=' . $idReclamo . '),true,false)';
            $sentencia3 = 'select if((select calendario from ordenes where numero=' . $id . '),true,false)';
            $sentencia4 = 'select ifnull((select count(idOrden) from trabajos where fechaInicio=\'' . $fecha . '\' and porcentaje < 100) ,0)';
            $sentencia6 = 'select tiempoEstimado from reclamos where idreclamo=' . $idReclamo;
            $consulta = $db->consulta($sentencia3);
            $texto = $sentencia3;


            if ($consulta[0][0]) {
                $consulta = $db->consulta($sentencia2);
                while ($consulta[0][0] == 0) {
                    list( $year, $mon, $day) = explode('/', $fecha);
                    $fecha = date('Y/m/d', mktime(0, 0, 0, $mon, $day + 1, $year));
                    $sentencia4 = 'select ifnull((select count(idOrden) from trabajos where fechaInicio=\'' . $fecha . '\') and porcentaje < 100,0)';
                    $sentencia7 = 'select if((select (select(select count(ci) from funcionarios where idEspecialidad= ' . $idEspecialidad[0][0] . ')*4)- (select ifnull((select sum(tiempoParcial) from trabajos where fechaInicio=\'' . $fecha . '\' and porcentaje < 100 and idOrden in (select numero from ordenes where idReclamo in(select idReclamo from reclamos where idEspecialidad=' . $idEspecialidad[0][0] . ')) ) ,0) ))>=(select tiempoEstimado from reclamos where idreclamo=' . $idReclamo . '),true,false)';
                    $consulta = $db->consulta($sentencia7);
                }
                $aux1 = $db->consulta($sentencia6);
                $aux2 = $db->consulta($sentencia4);
                var_dump($fecha);
                $sentencia5 = 'insert into trabajos (fechaInicio,porcentaje,tiempoParcial,idOrden,pocicion) values (\'' . $fecha . '\',0,' . $aux1[0][0] . ',' . $id . ',' . $aux2[0][0] . ')';
                $consulta = $db->consulta($sentencia5);
            }
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
    }

    public function buscarOrden($cliente, $reclamo, $fecha, $fidelizar, $idLugar) {
        try {

            $db = Conexion::getInstance();
            if ($fidelizar) {
                $sentencia = "SELECT * FROM ordenesfidelizar where idCliente=" . $cliente . " and idReclamo=" . $reclamo . " and fecha='" . $fecha . "'and idLugar=" . $idLugar . "";
            } else {
                $sentencia = "SELECT * FROM ordenes where idCliente=" . $cliente . " and idReclamo=" . $reclamo . " and fecha='" . $fecha . "'and idLugar=" . $idLugar . "";
            }

            $consulta = $db->consulta($sentencia);
            if (sizeof($consulta) == 1) {
                return TRUE;
            } else {
                return FALSE;
            }
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
    }

    public function traerOrdenes($numero) {
        try {
            $est = PersistenciaEstado::getInstance();
            $rec = PersistenciaReclamo::getInstance();
            $cli = PersistenciaCliente::getInstance();
            $lug = PersistenciaLugar::getInstance();
            $fun = PersistenciaFuncionario::getInstance();
            $db = Conexion::getInstance();
            $ordenes = array();
            $aux = "";
            if ($numero == "") {
                $sentencia = "SELECT * FROM ordenes";
                $aux = $db->consulta($sentencia);
            } elseif (is_array($numero)) {
                if (is_array($numero[1])) {
                    $sentencia = "select *from ordenes where idLugar=(select idLugar from lugarestelefonos where idTelefono=(select idTelefono from telefonos where numero=" . $numero[1][0] . " ) )";
                    $aux = $db->consulta($sentencia);
                } elseif ($numero[1] != "") {
                    $sentencia = "SELECT * FROM ordenes where idLugar=" . $numero[1] . " order by fecha desc, numero desc";

                    $aux = $db->consulta($sentencia);
                } else {
                    $sentencia2 = "SELECT *FROM ordenes WHERE numero=" . $numero[0];
                    $aux = $db->consulta($sentencia2);
                }
            } else {
                $sentencia2 = "SELECT *FROM ordenes WHERE numero=" . $numero;
                $aux = $db->consulta($sentencia2);
            }
            if ($aux != null) {
                foreach ($aux as $orden) {
                    $ord = new Orden(null);
                    $ord->numero = $orden[0];
                    $ord->fecha = $orden[1];
                    $ord->manoObra = $orden[2];
                    $ord->fechaCarta = $orden[3];
                    $ord->fechaPago = $orden[4];
                    $ord->observaciones = $orden[5];
                    $ord->precio = $orden[6];
                    $ord->numeroCarta = $orden[7];
                    $ord->otros = $orden[8];
                    $ord->materiales = $orden[9];
                    $ord->descripcion = $orden[10];
                    $ord->estado = $est->traerEstados($orden[11]);
                    $ord->reclamo = $rec->traerReclamos($orden[12]);
                    $ord->cliente = $cli->traerClientes($orden[13]);
                    $ord->lugar = $lug->traerLugares(array($orden[14]));
                    $ord->funcionarios = $fun->traerFuncionariosOrdenes($ord->numero);
                    $ord->pareja = $orden[15];
                    $ord->nombreCarta = $orden[16];
                    $ord->pagada = $orden[17];
                    $ord->moneda = $orden[18];
                    $ord->controlada = $orden[19];
                    $ord->contacto = $orden[20];
                    $ord->calendario = $orden[21];
                    $ord->usuario=$orden[22];
                    array_push($ordenes, $ord);
                }
            } else {
                $ord = new Orden(null);
                $ord->numero = '';
                array_push($ordenes, $ord);
            }
            return $ordenes;
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
    }

    public function traerOrdenesFidelizar($numero) {
        try {
            $est = PersistenciaEstado::getInstance();
            $rec = PersistenciaReclamo::getInstance();
            $cli = PersistenciaCliente::getInstance();
            $lug = PersistenciaLugar::getInstance();
            $fun = PersistenciaFuncionario::getInstance();
            $db = Conexion::getInstance();
            $ordenes = array();
            if ($numero == "") {
                $sentencia = "SELECT * FROM ordenesfidelizar";
                $aux = $db->consulta($sentencia);
            } else {
                $sentencia2 = "SELECT *FROM ordenesfidelizar WHERE numero=" . $numero;
                $aux = $db->consulta($sentencia2);
            }
            if ($aux != null) {
                foreach ($aux as $orden) {
                    $ord = new Orden(null);
                    $ord->numero = $orden[0];
                    $ord->fecha = $orden[1];
                    $ord->manoObra = $orden[2];
                    $ord->fechaCarta = $orden[3];
                    $ord->fechaPago = $orden[4];
                    $ord->observaciones = $orden[5];
                    $ord->precio = $orden[6];
                    $ord->numeroCarta = $orden[7];
                    $ord->otros = $orden[8];
                    $ord->materiales = $orden[9];
                    $ord->descripcion = $orden[10];
                    $ord->estado = $est->traerEstados($orden[11]);
                    $ord->reclamo = $rec->traerReclamos($orden[12]);
                    $ord->cliente = $cli->traerClientes($orden[13]);
                    $ord->lugar = $lug->traerLugares(array($orden[14]));
                    $ord->funcionarios = $fun->buscarFuncionariosOrdenFidelizar($ord->numero);
                    $ord->pareja = $orden[15];
                    $ord->nombreCarta = $orden[16];
                    $ord->pagada = $orden[17];
                    $ord->moneda = $orden[18];
                    $ord->controlada = $orden[19];
                    $ord->contacto = $orden[20];
                    $ord->calendario = $orden[21];
                    $ord->usuario=$orden[22];
                    array_push($ordenes, $ord);
                }
            } else {
                $ord = new Orden(null);
                $ord->numero = '';
                array_push($ordenes, $ord);
            }
            return $ordenes;
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
    }

    public function actualizarOrden($datos) {
        try {
            $fun = PersistenciaFuncionario::getInstance();
            $db = Conexion::getInstance();

            $sentencia = "UPDATE ordenes SET manoObra=" . $datos[0] . ",fechaCarta='" . $datos[1] . "',fechaPago='" . $datos[2] . "',
                      observaciones='" . $datos[3] . "',precio='" . $datos[4] . "',numeroCarta='" . $datos[5] . "',otros='" . $datos[6] . "',
                      materiales='" . $datos[7] . "',descripcion='" . $datos[8] . "',idEstado=" . $datos[9] . ",idReclamo='" . $datos[10] . "',
                      idCliente='" . $datos[11] . "',idLugar='" . $datos[12] . "',pareja=" . $datos[14] . ",nombreCarta='" . $datos[15] . "'
                      ,pagada=" . $datos[16] . ",moneda='" . $datos[17] . "', contacto='" . $datos[18] . "', calendario=" . $datos[19] . "
                      , usuario=" . $datos[20] . " WHERE numero=" . $datos[21];
            $consulta = $db->consulta($sentencia);
//            var_dump($datos[19]);
            if ($datos[19] == 'true') {
                $sentencia2 = "select fecha from ordenes where numero=" . $datos[20];
                $fecha = $db->consulta($sentencia2);
                list( $year, $mon, $day) = explode('-', $fecha[0][0]);
                $fechaX = date('Y/m/d', mktime(0, 0, 0, $mon, $day, $year));
                $this->agregarTrabajos($fechaX, $datos[10], $datos[20]);
            } else {
                $sentenciaX = "delete from trabajos where idOrden=" . $datos[20];
//                var_dump($sentenciaX);
                $X = $db->consulta($sentenciaX);
            }
            
            $dato = array($datos[20], $datos[13]);
            $fun->actualizarFuncionarioOrdenes($dato);
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
    }

    public function marcarOrden($datos) {
        try {
            $db = Conexion::getInstance();
            $sentencia = "UPDATE ordenes SET controlada=" . $datos[1] . " WHERE numero=" . $datos[0];
            $texto = $sentencia;
            @ $fp = fopen("archivo.txt", 'w');
            if (!$fp) {
                echo '<p style="color: #ff0000">
            <strong>No se pudo abrir el archivo
            </strong>
            </p>';
                exit;
            }
            fwrite($fp, $texto, strlen($texto));
            fclose($fp);

            $archivo = file_get_contents("archivo.txt");

            $consulta = $db->consulta($sentencia);
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
    }

    public function alertaOrdenesAtrasadas() {
        $query = "select numero from ordenes where idestado = 1 and fecha < UTC_DATE()";
        $con = Conexion::getInstance();
        $res = $con->consulta($query);
        if (sizeof($res) != 0) {
            return TRUE;
        } else {
            return FALSE;
        }
    }

    public function borrarOrdenFidelizar($numero) {
        try {
            $fun = PersistenciaFuncionario::getInstance();
            $con = Conexion::getInstance();
            $query = "delete from ordenesfidelizar where numero=" . $numero;
            $con->consulta($query);
            $fun->borrarOrdenFidelizarFuncionario($numero);
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
    }

    public function alertaFechaCobro() {
        $query = "select numero from ordenes where fechaPago = UTC_DATE()";
        $con = Conexion::getInstance();
        $res = $con->consulta($query);
        if (sizeof($res) != 0) {
            return TRUE;
        } else {
            return FALSE;
        }
    }

    public function traerNumeroOrdenes() {
        try {
            $db = Conexion::getInstance();
            $sentencia = "SELECT MAX(numero) FROM ordenes";
            $aux = $db->consulta($sentencia);
            if (is_null($aux[0][0])) {
                $aux[0][0] = '0';
            }
            return $aux[0][0];
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
    }

    public function traerNumeroOrdenesFidelizar() {
        try {
            $db = Conexion::getInstance();
            $sentencia = "SELECT MAX(numero) FROM ordenesFidelizar";
            $aux = $db->consulta($sentencia);
            if (is_null($aux[0][0])) {
                $aux[0][0] = '0';
            }
            return $aux[0][0];
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
    }

    public function reportes($numReporte) {
        try {
            switch ($numReporte) {
                case 0:
                    $query = "select (orden4.numero) as numero, (reclamos.descripcion) as reclamo, (orden4.nombre) as cliente, (orden4.lugar) as lugar, (orden4.tipo) as tipo, (orden4.manoobra) as manoobra, (orden4.estado) as estado, (orden4.precio) as precio, (orden4.numerocarta) as numerocarta, (orden4.fechacarta) as fechacarta,(orden4.fechapago) as fechapago,(orden4.nombrecarta) as nombrecarta,(orden4.pagada ) as pagada,(orden4.fecha) as fecha, (orden4.controlada) as controlada from (select (orden3.numero) as numero, (orden3.idreclamo) as idreclamo, (orden3.nombre) as nombre, (orden3.lugar) as lugar, (orden3.tipo) as tipo, (orden3.manoobra) as manoobra, (estados.nombre) as estado, (orden3.precio) as precio, (orden3.numerocarta) as numerocarta, (orden3.fechacarta  ) as fechacarta,(orden3.fechapago) as fechapago,(orden3.nombrecarta) as nombrecarta,(orden3.pagada ) as pagada,(orden3.fecha) as fecha, (orden3.controlada) as controlada from (select (orden2.numero) as numero, (orden2.idreclamo) as idreclamo, (orden2.cliente) as nombre, (lugares.nombrelugar) as lugar, (lugares.tipo) as tipo, (orden2.manoobra) as manoobra, (orden2.idestado) as idestado, (orden2.precio) as precio, (orden2.numerocarta) as numerocarta, (orden2.fechacarta  ) as fechacarta,(orden2.fechapago) as fechapago,(orden2.nombrecarta) as nombrecarta,(orden2.pagada ) as pagada,(orden2.fecha) as fecha, (orden2.controlada) as controlada from (select (orden.numero) as numero, (orden.idreclamo) as idreclamo, (clientes.nombre) as cliente, (orden.idlugar) as idlugar, (orden.manoobra) as manoobra, (orden.idestado) as idestado, (orden.precio) as precio, (orden.numerocarta) as numerocarta, (orden.fechacarta  ) as fechacarta, (orden.fechapago  ) as fechapago,(orden.nombreCarta) as nombrecarta,(orden.pagada ) as pagada,(orden.fecha) as fecha,(orden.controlada) as controlada  from (select numero, idReclamo , idCliente, idLugar, manoObra, idEstado, precio, numeroCarta, fechaCarta, fechapago,nombreCarta, pagada, fecha, controlada from ordenes) as orden inner join clientes on orden.idcliente = clientes.idcliente) as orden2 inner join lugares on lugares.idlugar = orden2.idlugar) as orden3 inner join estados on orden3.idestado = estados.idestado) as orden4 inner join reclamos on orden4.idreclamo = reclamos.idreclamo order by numero";
                    break;
                case 1:
                    $query = "select (orden4.numero) as numero, (reclamos.descripcion) as reclamo, (orden4.nombre) as cliente, (orden4.lugar) as lugar, (orden4.tipo) as tipo, (orden4.manoobra) as manoobra, (orden4.estado) as estado, (orden4.precio) as precio, (orden4.numerocarta) as numerocarta, (orden4.fechacarta) as fechacarta,(orden4.fechapago) as fechapago,(orden4.nombrecarta) as nombrecarta,(orden4.pagada ) as pagada,(orden4.fecha) as fecha, (orden4.controlada) as controlada from (select (orden3.numero) as numero, (orden3.idreclamo) as idreclamo, (orden3.nombre) as nombre, (orden3.lugar) as lugar, (orden3.tipo) as tipo, (orden3.manoobra) as manoobra, (estados.nombre) as estado, (orden3.precio) as precio, (orden3.numerocarta) as numerocarta, (orden3.fechacarta  ) as fechacarta,(orden3.fechapago) as fechapago,(orden3.nombrecarta) as nombrecarta,(orden3.pagada ) as pagada,(orden3.fecha) as fecha, (orden3.controlada) as controlada from (select (orden2.numero) as numero, (orden2.idreclamo) as idreclamo, (orden2.cliente) as nombre, (lugares.nombrelugar) as lugar, (lugares.tipo) as tipo, (orden2.manoobra) as manoobra, (orden2.idestado) as idestado, (orden2.precio) as precio, (orden2.numerocarta) as numerocarta, (orden2.fechacarta  ) as fechacarta,(orden2.fechapago) as fechapago,(orden2.nombrecarta) as nombrecarta,(orden2.pagada ) as pagada,(orden2.fecha) as fecha, (orden2.controlada) as controlada from (select (orden.numero) as numero, (orden.idreclamo) as idreclamo, (clientes.nombre) as cliente, (orden.idlugar) as idlugar, (orden.manoobra) as manoobra, (orden.idestado) as idestado, (orden.precio) as precio, (orden.numerocarta) as numerocarta, (orden.fechacarta  ) as fechacarta, (orden.fechapago  ) as fechapago,(orden.nombreCarta) as nombrecarta,(orden.pagada ) as pagada,(orden.fecha) as fecha,(orden.controlada) as controlada  from (select numero, idReclamo , idCliente, idLugar, manoObra, idEstado, precio, numeroCarta, fechaCarta, fechapago,nombreCarta, pagada, fecha, controlada  from ordenes where idEstado = 1) as orden inner join clientes on orden.idcliente = clientes.idcliente) as orden2 inner join lugares on lugares.idlugar = orden2.idlugar) as orden3 inner join estados on orden3.idestado = estados.idestado) as orden4 inner join reclamos on orden4.idreclamo = reclamos.idreclamo where estado ='para ejecutar'order by numero";
                    break;
                case 2:
                    $query = "select (orden4.numero) as numero, (reclamos.descripcion) as reclamo, (orden4.nombre) as cliente, (orden4.lugar) as lugar, (orden4.tipo) as tipo, (orden4.manoobra) as manoobra, (orden4.estado) as estado, (orden4.precio) as precio, (orden4.numerocarta) as numerocarta, (orden4.fechacarta) as fechacarta,(orden4.fechapago) as fechapago,(orden4.nombrecarta) as nombrecarta,(orden4.pagada ) as pagada,(orden4.fecha) as fecha, (orden4.controlada) as controlada from (select (orden3.numero) as numero, (orden3.idreclamo) as idreclamo, (orden3.nombre) as nombre, (orden3.lugar) as lugar, (orden3.tipo) as tipo, (orden3.manoobra) as manoobra, (estados.nombre) as estado, (orden3.precio) as precio, (orden3.numerocarta) as numerocarta, (orden3.fechacarta  ) as fechacarta,(orden3.fechapago) as fechapago,(orden3.nombrecarta) as nombrecarta,(orden3.pagada ) as pagada,(orden3.fecha) as fecha, (orden3.controlada) as controlada from (select (orden2.numero) as numero, (orden2.idreclamo) as idreclamo, (orden2.cliente) as nombre, (lugares.nombrelugar) as lugar, (lugares.tipo) as tipo, (orden2.manoobra) as manoobra, (orden2.idestado) as idestado, (orden2.precio) as precio, (orden2.numerocarta) as numerocarta, (orden2.fechacarta  ) as fechacarta,(orden2.fechapago) as fechapago,(orden2.nombrecarta) as nombrecarta,(orden2.pagada ) as pagada,(orden2.fecha) as fecha, (orden2.controlada) as controlada from (select (orden.numero) as numero, (orden.idreclamo) as idreclamo, (clientes.nombre) as cliente, (orden.idlugar) as idlugar, (orden.manoobra) as manoobra, (orden.idestado) as idestado, (orden.precio) as precio, (orden.numerocarta) as numerocarta, (orden.fechacarta  ) as fechacarta, (orden.fechapago  ) as fechapago,(orden.nombreCarta) as nombrecarta,(orden.pagada ) as pagada,(orden.fecha) as fecha,(orden.controlada) as controlada  from (select numero, idReclamo , idCliente, idLugar, manoObra, idEstado, precio, numeroCarta, fechaCarta, fechapago,nombreCarta, pagada, fecha, controlada  from ordenes where idEstado = 2) as orden inner join clientes on orden.idcliente = clientes.idcliente) as orden2 inner join lugares on lugares.idlugar = orden2.idlugar) as orden3 inner join estados on orden3.idestado = estados.idestado) as orden4 inner join reclamos on orden4.idreclamo = reclamos.idreclamo where estado ='en ejecucion' order by numero";
                    break;
                case 3 :
                    $query = "select (orden4.numero) as numero, (reclamos.descripcion) as reclamo, (orden4.nombre) as cliente, (orden4.lugar) as lugar, (orden4.tipo) as tipo, (orden4.manoobra) as manoobra, (orden4.estado) as estado, (orden4.precio) as precio, (orden4.numerocarta) as numerocarta, (orden4.fechacarta) as fechacarta,(orden4.fechapago) as fechapago,(orden4.nombrecarta) as nombrecarta,(orden4.pagada ) as pagada,(orden4.fecha) as fecha, (orden4.controlada) as controlada from (select (orden3.numero) as numero, (orden3.idreclamo) as idreclamo, (orden3.nombre) as nombre, (orden3.lugar) as lugar, (orden3.tipo) as tipo, (orden3.manoobra) as manoobra, (estados.nombre) as estado, (orden3.precio) as precio, (orden3.numerocarta) as numerocarta, (orden3.fechacarta  ) as fechacarta,(orden3.fechapago) as fechapago,(orden3.nombrecarta) as nombrecarta,(orden3.pagada ) as pagada,(orden3.fecha) as fecha, (orden3.controlada) as controlada from (select (orden2.numero) as numero, (orden2.idreclamo) as idreclamo, (orden2.cliente) as nombre, (lugares.nombrelugar) as lugar, (lugares.tipo) as tipo, (orden2.manoobra) as manoobra, (orden2.idestado) as idestado, (orden2.precio) as precio, (orden2.numerocarta) as numerocarta, (orden2.fechacarta  ) as fechacarta,(orden2.fechapago) as fechapago,(orden2.nombrecarta) as nombrecarta,(orden2.pagada ) as pagada,(orden2.fecha) as fecha, (orden2.controlada) as controlada from (select (orden.numero) as numero, (orden.idreclamo) as idreclamo, (clientes.nombre) as cliente, (orden.idlugar) as idlugar, (orden.manoobra) as manoobra, (orden.idestado) as idestado, (orden.precio) as precio, (orden.numerocarta) as numerocarta, (orden.fechacarta  ) as fechacarta, (orden.fechapago  ) as fechapago,(orden.nombreCarta) as nombrecarta,(orden.pagada ) as pagada,(orden.fecha) as fecha ,(orden.controlada) as controlada from (select numero, idReclamo , idCliente, idLugar, manoObra, idEstado, precio, numeroCarta, fechaCarta, fechapago,nombreCarta, pagada, fecha, controlada  from ordenes where idEstado = 3) as orden inner join clientes on orden.idcliente = clientes.idcliente) as orden2 inner join lugares on lugares.idlugar = orden2.idlugar) as orden3 inner join estados on orden3.idestado = estados.idestado) as orden4 inner join reclamos on orden4.idreclamo = reclamos.idreclamo where estado ='ejecutada' order by numero";
                    break;
                case 6:
                    $query = "select (orden4.numero) as numero, (reclamos.descripcion) as reclamo, (orden4.nombre) as cliente, (orden4.lugar) as lugar, (orden4.tipo) as tipo, (orden4.manoobra) as manoobra, (orden4.estado) as estado, (orden4.precio) as precio, (orden4.numerocarta) as numerocarta, (orden4.fechacarta) as fechacarta,(orden4.fechapago) as fechapago,(orden4.nombrecarta) as nombrecarta,(orden4.pagada ) as pagada,(orden4.fecha) as fecha, (orden4.controlada) as controlada from (select (orden3.numero) as numero, (orden3.idreclamo) as idreclamo, (orden3.nombre) as nombre, (orden3.lugar) as lugar, (orden3.tipo) as tipo, (orden3.manoobra) as manoobra, (estados.nombre) as estado, (orden3.precio) as precio, (orden3.numerocarta) as numerocarta, (orden3.fechacarta  ) as fechacarta,(orden3.fechapago) as fechapago,(orden3.nombrecarta) as nombrecarta,(orden3.pagada ) as pagada,(orden3.fecha) as fecha, (orden3.controlada) as controlada from (select (orden2.numero) as numero, (orden2.idreclamo) as idreclamo, (orden2.cliente) as nombre, (lugares.nombrelugar) as lugar, (lugares.tipo) as tipo, (orden2.manoobra) as manoobra, (orden2.idestado) as idestado, (orden2.precio) as precio, (orden2.numerocarta) as numerocarta, (orden2.fechacarta  ) as fechacarta,(orden2.fechapago) as fechapago,(orden2.nombrecarta) as nombrecarta,(orden2.pagada ) as pagada,(orden2.fecha) as fecha, (orden2.controlada) as controlada from (select (orden.numero) as numero, (orden.idreclamo) as idreclamo, (clientes.nombre) as cliente, (orden.idlugar) as idlugar, (orden.manoobra) as manoobra, (orden.idestado) as idestado, (orden.precio) as precio, (orden.numerocarta) as numerocarta, (orden.fechacarta  ) as fechacarta, (orden.fechapago  ) as fechapago,(orden.nombreCarta) as nombrecarta,(orden.pagada ) as pagada,(orden.fecha) as fecha,(orden.controlada) as controlada  from (select numero, idReclamo , idCliente, idLugar, manoObra, idEstado, precio, numeroCarta, fechaCarta, fechapago,nombreCarta, pagada, fecha, controlada  from ordenes where idEstado = 6) as orden inner join clientes on orden.idcliente = clientes.idcliente) as orden2 inner join lugares on lugares.idlugar = orden2.idlugar) as orden3 inner join estados on orden3.idestado = estados.idestado) as orden4 inner join reclamos on orden4.idreclamo = reclamos.idreclamo where estado ='pendiente de cobro' order by numero";
                    break;
                case 7 :
                    $query = "select (orden4.numero) as numero, (reclamos.descripcion) as reclamo, (orden4.nombre) as cliente, (orden4.lugar) as lugar, (orden4.tipo) as tipo, (orden4.manoobra) as manoobra, (orden4.estado) as estado, (orden4.precio) as precio, (orden4.numerocarta) as numerocarta, (orden4.fechacarta) as fechacarta,(orden4.fechapago) as fechapago,(orden4.nombrecarta) as nombrecarta,(orden4.pagada ) as pagada,(orden4.fecha) as fecha, (orden4.controlada) as controlada from (select (orden3.numero) as numero, (orden3.idreclamo) as idreclamo, (orden3.nombre) as nombre, (orden3.lugar) as lugar, (orden3.tipo) as tipo, (orden3.manoobra) as manoobra, (estados.nombre) as estado, (orden3.precio) as precio, (orden3.numerocarta) as numerocarta, (orden3.fechacarta  ) as fechacarta,(orden3.fechapago) as fechapago,(orden3.nombrecarta) as nombrecarta,(orden3.pagada ) as pagada,(orden3.fecha) as fecha, (orden3.controlada) as controlada from (select (orden2.numero) as numero, (orden2.idreclamo) as idreclamo, (orden2.cliente) as nombre, (lugares.nombrelugar) as lugar, (lugares.tipo) as tipo, (orden2.manoobra) as manoobra, (orden2.idestado) as idestado, (orden2.precio) as precio, (orden2.numerocarta) as numerocarta, (orden2.fechacarta  ) as fechacarta,(orden2.fechapago) as fechapago,(orden2.nombrecarta) as nombrecarta,(orden2.pagada ) as pagada,(orden2.fecha) as fecha, (orden2.controlada) as controlada from (select (orden.numero) as numero, (orden.idreclamo) as idreclamo, (clientes.nombre) as cliente, (orden.idlugar) as idlugar, (orden.manoobra) as manoobra, (orden.idestado) as idestado, (orden.precio) as precio, (orden.numerocarta) as numerocarta, (orden.fechacarta  ) as fechacarta, (orden.fechapago  ) as fechapago,(orden.nombreCarta) as nombrecarta,(orden.pagada ) as pagada,(orden.fecha) as fecha ,(orden.controlada) as controlada from (select numero, idReclamo , idCliente, idLugar, manoObra, idEstado, precio, numeroCarta, fechaCarta, fechapago,nombreCarta, pagada, fecha, controlada  from ordenes where idEstado = 7) as orden inner join clientes on orden.idcliente = clientes.idcliente) as orden2 inner join lugares on lugares.idlugar = orden2.idlugar) as orden3 inner join estados on orden3.idestado = estados.idestado) as orden4 inner join reclamos on orden4.idreclamo = reclamos.idreclamo where estado ='liquidada' order by numero";
                    break;
                case 4 :
                    $query = "select (orden4.numero) as numero, (reclamos.descripcion) as reclamo, (orden4.nombre) as cliente, (orden4.lugar) as lugar, (orden4.tipo) as tipo, (orden4.manoobra) as manoobra, (orden4.estado) as estado, (orden4.precio) as precio, (orden4.numerocarta) as numerocarta, (orden4.fechacarta) as fechacarta,(orden4.fechapago) as fechapago,(orden4.nombrecarta) as nombrecarta,(orden4.pagada ) as pagada,(orden4.fecha) as fecha from (select (orden3.numero) as numero, (orden3.idreclamo) as idreclamo, (orden3.nombre) as nombre, (orden3.lugar) as lugar, (orden3.tipo) as tipo, (orden3.manoobra) as manoobra, (estados.nombre) as estado, (orden3.precio) as precio, (orden3.numerocarta) as numerocarta, (orden3.fechacarta  ) as fechacarta,(orden3.fechapago) as fechapago,(orden3.nombrecarta) as nombrecarta,(orden3.pagada ) as pagada,(orden3.fecha) as fecha from (select (orden2.numero) as numero, (orden2.idreclamo) as idreclamo, (orden2.cliente) as nombre, (lugares.nombrelugar) as lugar, (lugares.tipo) as tipo, (orden2.manoobra) as manoobra, (orden2.idestado) as idestado, (orden2.precio) as precio, (orden2.numerocarta) as numerocarta, (orden2.fechacarta  ) as fechacarta,(orden2.fechapago) as fechapago,(orden2.nombrecarta) as nombrecarta,(orden2.pagada ) as pagada,(orden2.fecha) as fecha from (select (orden.numero) as numero, (orden.idreclamo) as idreclamo, (clientes.nombre) as cliente, (orden.idlugar) as idlugar, (orden.manoobra) as manoobra, (orden.idestado) as idestado, (orden.precio) as precio, (orden.numerocarta) as numerocarta, (orden.fechacarta  ) as fechacarta, (orden.fechapago  ) as fechapago,(orden.nombreCarta) as nombrecarta,(orden.pagada ) as pagada,(orden.fecha) as fecha  from (select numero, idReclamo , idCliente, idLugar, manoObra, idEstado, precio, numeroCarta, fechaCarta, fechapago,nombreCarta, pagada, fecha from ordenes where pagada = false) as orden inner join clientes on orden.idcliente = clientes.idcliente) as orden2 inner join lugares on lugares.idlugar = orden2.idlugar) as orden3 inner join estados on orden3.idestado = estados.idestado) as orden4 inner join reclamos on orden4.idreclamo = reclamos.idreclamo where order by numero";
                    break;
                case 5 :
                    $query = "select (orden4.numero) as numero, (reclamos.descripcion) as reclamo, (orden4.nombre) as cliente, (orden4.lugar) as lugar, (orden4.tipo) as tipo, (orden4.manoobra) as manoobra, (orden4.estado) as estado, (orden4.precio) as precio, (orden4.numerocarta) as numerocarta, (orden4.fechacarta) as fechacarta,(orden4.fechapago) as fechapago,(orden4.nombrecarta) as nombrecarta,(orden4.pagada ) as pagada,(orden4.fecha) as fecha from (select (orden3.numero) as numero, (orden3.idreclamo) as idreclamo, (orden3.nombre) as nombre, (orden3.lugar) as lugar, (orden3.tipo) as tipo, (orden3.manoobra) as manoobra, (estados.nombre) as estado, (orden3.precio) as precio, (orden3.numerocarta) as numerocarta, (orden3.fechacarta  ) as fechacarta,(orden3.fechapago) as fechapago,(orden3.nombrecarta) as nombrecarta,(orden3.pagada ) as pagada,(orden3.fecha) as fecha from (select (orden2.numero) as numero, (orden2.idreclamo) as idreclamo, (orden2.cliente) as nombre, (lugares.nombrelugar) as lugar, (lugares.tipo) as tipo, (orden2.manoobra) as manoobra, (orden2.idestado) as idestado, (orden2.precio) as precio, (orden2.numerocarta) as numerocarta, (orden2.fechacarta  ) as fechacarta,(orden2.fechapago) as fechapago,(orden2.nombrecarta) as nombrecarta,(orden2.pagada ) as pagada,(orden2.fecha) as fecha from (select (orden.numero) as numero, (orden.idreclamo) as idreclamo, (clientes.nombre) as cliente, (orden.idlugar) as idlugar, (orden.manoobra) as manoobra, (orden.idestado) as idestado, (orden.precio) as precio, (orden.numerocarta) as numerocarta, (orden.fechacarta  ) as fechacarta, (orden.fechapago  ) as fechapago,(orden.nombreCarta) as nombrecarta,(orden.pagada ) as pagada,(orden.fecha) as fecha  from (select numero, idReclamo , idCliente, idLugar, manoObra, idEstado, precio, numeroCarta, fechaCarta, fechapago,nombreCarta, pagada, fecha from ordenes where pagada = true) as orden inner join clientes on orden.idcliente = clientes.idcliente) as orden2 inner join lugares on lugares.idlugar = orden2.idlugar) as orden3 inner join estados on orden3.idestado = estados.idestado) as orden4 inner join reclamos on orden4.idreclamo = reclamos.idreclamo order by fecha desc";
                    break;
            }
            $db = Conexion::getInstance();
            $res = $db->consulta($query);
            $i = 0;
            foreach ($res as $orden) {
                if ($res[$i]['pagada']) {
                    $res[$i]['pagada'] = 'pago';
                } else {
                    $res[$i]['pagada'] = 'pendiente';
                }
                $query2 = "select nombre from funcionarios inner join ordenesfuncionarios on funcionarios.ci = ordenesfuncionarios.ci where numero=" . $orden['numero'];
                $aux = $db->consulta($query2);
                if (sizeof($aux) == 1) {
                    $res[$i] ['tecnicos'] = $aux[0]['nombre'];
                } else {
                    $res[$i]['tecnicos'] = $this->funcionarios($aux);
                }
                $i = $i + 1;
            }
            return $res;
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
    }

    public function funcionarios($aux) {
        $funcionarios = "";
        foreach ($aux as $nombre) {
            $funcionarios = $funcionarios . " " . $nombre['nombre'];
        }
        return $funcionarios;
    }

    public function alertaR($datos) {
        try {
            $dias = mktime(0, 0, 0, date("m"), date("d") - 30, date("Y"));
            $fecha = date("Y/m/d", $dias);
            $db = Conexion::getInstance();
            $sentencia = "SELECT * FROM ordenes where idCliente=" . $datos[1] . " and idReclamo=" . $datos[0] . " and fecha>='" . $fecha . "'";
            $aux = $db->consulta($sentencia);

            if (sizeof($aux) >= 4) {
                return TRUE;
            } else {
                return FALSE;
            }
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
    }

    public function alertaF() {
        try {
            $db = Conexion::getInstance();
            $sentencia = "SELECT * FROM ordenesTemporales ";
            $aux = $db->consulta($sentencia);

            if (sizeof($aux) >= 1) {
                return TRUE;
            } else {
                return FALSE;
            }
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
    }

    public function traerOrdenesSinTecnicos() {
        try {
            require_once 'persistenciaClienteParticular.php';
            $fun = PersistenciaFuncionario::getInstance();
            $cli = PersistenciaCliente::getInstance();
            $db = Conexion::getInstance();
            $res = Array();
            $sentencia = "select numero, fecha, descripcion, nombre, tab2.idCliente from clientes inner join (select numero, fecha, descripcion, idCliente from reclamos inner join (SELECT numero, fecha, idCliente, idReclamo FROM ordenes where idEstado <> 3 and numero not in (select numero from ordenesfuncionarios where ci <> 0) order by fecha, numero) as tab1 where tab1.idreclamo = reclamos.idreclamo) as tab2 where tab2.idCliente = clientes.idcliente";
            $aux = $db->consulta($sentencia);
            for ($i = 0; $i < sizeof($aux); $i++) {
                $cliente = $cli->traerClientes($aux[$i][4]);
                $nombre = $cliente[0]->nombre;
                $auxord = Array($aux[$i][0], $aux[$i][1], $aux[$i][2], $nombre);
                array_push($res, $auxord);
            }
            return $res;
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
    }

    public function traerOrdenesSimplesParaEjec() {
        try {
            require_once 'persistenciaClienteParticular.php';
            $fun = PersistenciaFuncionario::getInstance();
            $cli = PersistenciaCliente::getInstance();
            $db = Conexion::getInstance();
            $res = Array();
            $sentencia = "select numero, fecha, descripcion, nombre, tab2.idcliente from clientes inner join (select numero, fecha, descripcion, idCliente from reclamos inner join (select numero, fecha, idReclamo, idCliente from ordenes where idestado < 3 order by fecha, numero) as tab where tab.idReclamo = reclamos.idreclamo) as tab2 where tab2.idcliente = clientes.idcliente";
            $aux = $db->consulta($sentencia);
            for ($i = 0; $i < sizeof($aux); $i++) {
                $cliente = $cli->traerClientes($aux[$i][4]);
                $nombre = $cliente[0]->nombre;
                $auxord = Array($aux[$i][0], $aux[$i][1], $aux[$i][2], $nombre, $fun->traerFuncionariosOrdenes($aux[$i][0]));
                array_push($res, $auxord);
            }
            return $res;
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
    }

    public function traerOrdenesSimplesClientes($idcliente, $est) {
        try {
            require_once 'persistenciaClienteParticular.php';
            $fun = PersistenciaFuncionario::getInstance();
            $cli = PersistenciaClienteParticular::getInstance();
            $db = Conexion::getInstance();
            $res = Array();
            $sentencia = "select numero, fecha, descripcion, nombre, tab2.idcliente, idEstado from clientes inner join (select numero, fecha, descripcion, idCliente, idEstado from reclamos inner join (select numero, fecha, idReclamo, idCliente, idEstado from ordenes where idestado = " . $est . " and idCliente = " . $idcliente . " order by fecha, numero) as tab where tab.idReclamo = reclamos.idreclamo) as tab2 where tab2.idcliente = clientes.idcliente";
            $aux = $db->consulta($sentencia);
            for ($i = 0; $i < sizeof($aux); $i++) {
                $ape = $cli->buscarClientePId($aux[$i][4])->apellido;
                $nombre = ($ape != 'N') ? $aux[$i][3] . ' ' . $ape : $aux[$i][3];
                $auxord = Array($aux[$i][0], $aux[$i][1], $aux[$i][2], $nombre, $fun->traerFuncionariosOrdenes($aux[$i][0]));
                array_push($res, $auxord);
            }
            return $res;
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
    }

    public function traerOrdenesSimplesTecnicos($id) {
        try {
            require_once 'persistenciaClienteParticular.php';
            $fun = PersistenciaFuncionario::getInstance();
            $cli = PersistenciaClienteParticular::getInstance();
            $db = Conexion::getInstance();
            $res = Array();
            $sentencia = "select numero, fecha, descripcion, nombre, tab2.idcliente from clientes inner join (select numero, fecha, descripcion, idCliente from reclamos inner join (select numero, fecha, idReclamo, idCliente from ordenes where idestado < 3 and numero in (select numero from ordenesfuncionarios where ci = " . $id . ") order by fecha, numero) as tab where tab.idReclamo = reclamos.idreclamo) as tab2 where tab2.idcliente = clientes.idcliente";
            $aux = $db->consulta($sentencia);
            for ($i = 0; $i < sizeof($aux); $i++) {
                $ape = $cli->buscarClientePId($aux[$i][4])->apellido;
                $nombre = ($ape != 'N') ? $aux[$i][3] . ' ' . $ape : $aux[$i][3];
                $auxord = Array($aux[$i][0], $aux[$i][1], $aux[$i][2], $nombre, $fun->traerFuncionariosOrdenes($aux[$i][0]));
                array_push($res, $auxord);
            }
            return $res;
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
    }

    public function actualizarPareja($numero, $valor) {
        try {
            $db = Conexion::getInstance();
            $sentencia = 'UPDATE ordenes SET pareja=' . $valor . ' where numero=' . $numero;
            $db->consulta($sentencia);
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
    }

}
?>

